package handler

import (
	"amin-ease/internal/dto"
	"amin-ease/internal/service"
	"github.com/gin-gonic/gin"
	"net/http"
)

type UserHandler struct {
	UserService service.UserServiceImpl
}

func NewUserHandler() *UserHandler {
	return &UserHandler{
		service.NewUserService(),
	}
}
func (u *UserHandler) Register(c *gin.Context) {
	var userReq dto.RegisterReq
	if err := c.ShouldBindJSON(&userReq); err != nil {
		// 返回错误信息
		// gin.H封装了生成json数据的工具
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	register, err := u.UserService.Register(userReq)
	if err != nil {
		c.JSON(http.StatusBadRequest, gin.H{
			"code": 400,
			"msg":  "注册失败",
			"data": nil,
		})
		return
	}
	c.JSON(http.StatusOK, gin.H{
		"code": 200,
		"msg":  "注册成功",
		"data": register,
	})
	return
}
func (u *UserHandler) UserList(c *gin.Context) {
	var listReq dto.ListReq
	if err := c.ShouldBindJSON(&listReq); err != nil {
		// 返回错误信息
		// gin.H封装了生成json数据的工具
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	list, err := u.UserService.UserList(listReq)
	if err != nil {
		c.JSON(http.StatusBadRequest, gin.H{
			"code": 400,
			"msg":  "用户列表查询失败",
			"data": nil,
		})
		return
	}
	c.JSON(http.StatusOK, gin.H{
		"code": 200,
		"msg":  "用户列表查询成功",
		"data": list,
	})
	return
}
func (u *UserHandler) FindUsers(c *gin.Context) {
	var usersReq dto.UsersReq
	if err := c.ShouldBindJSON(&usersReq); err != nil {
		// 返回错误信息
		// gin.H封装了生成json数据的工具
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	user, err := u.UserService.FindUser(usersReq)
	if err != nil {
		c.JSON(http.StatusBadRequest, gin.H{
			"code": 400,
			"msg":  "查看个人公告失败",
			"data": nil,
		})
		return
	}
	c.JSON(http.StatusOK, gin.H{
		"code": 200,
		"msg":  "查看个人公告成功",
		"data": user,
	})
	return
}
func (u *UserHandler) Add(c *gin.Context) {
	var addReq dto.AddReq
	if err := c.ShouldBindJSON(&addReq); err != nil {
		// 返回错误信息
		// gin.H封装了生成json数据的工具
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	add, err := u.UserService.Add(addReq)
	if err != nil {
		c.JSON(http.StatusBadRequest, gin.H{
			"code": 400,
			"msg":  "评论失败",
			"data": nil,
		})
		return
	}
	c.JSON(http.StatusBadRequest, gin.H{
		"code": 200,
		"msg":  "评论成功",
		"data": add,
	})
	return
}
